The purpose of this exercise is to teach methods of creating polygon and polyline data for display in various programs. These skills will help you understand the foundation of vector data, creation of new polygon and polyline datasets, and editing attribute tables.

1 The Introduction

The Austin Peay State University - College of Science, Technology, Engineering, and Mathematics will be hosting the upcoming Middle Tennessee Science and Engineering Fair in the Spring semester. In preparation for this large event, the Dean of CoSTEM has asked you to develop a custom map of campus that not only shows the specific venues but also helps to highlight the college. This is a major recruiting event for high school students so the dean wants to make sure participants are able to visit campus buildings that house STEM departments and other facilities that support research or student interests. The map should also highlight the various venues being used for the event and accessible parking locations for each building.

The following locations need to be included on the map and highlighted via text or legend on the map:

  • Preliminary Round Venues: the Dunn Center and Foy Center for high school participants, and the Sundquist Science Center - Atrium for middle school participants
    • Preliminary rounds will be held from 8am to 10am
      • Dunn Center parking lots include: 2, 3, 6, 50, 51
      • Foy Center parking lots include: 6, 83
  • Plenary Speaker Venues: Clement Auditorium in the Clement Building for the middle school participants and the Mabry Concert Hall in the Music/Mass Communication Building for the high school participants
    • These presentations will occur from 10:30 am to 12pm.
      • Clement parking lots include: 10, 11, 40, 43
      • MMC parking lots include: 7, 8, 43, 45
  • Vendor and Informational Locations: Morgan University Center, Second Floor, Main Lobby (remember the 2nd floor is where most students enter the MUC)
    • Vendor booths will be available from 12pm to 2pm
  • Final Round and Awards for all age groups: Morgan University Center Ballroom (3rd Floor)
    • The final round will be held from 2:30pm to 4pm with awards immediately following
      • MUC parking lots include: 40, 43, 45, 82, 83

Refer to the information on the Campus Maps page of the APSU website for more information about the building names and parking lot numbers.

Additionally, the dean would like you to include the following STEM buildings and what departments can be found in each (when applicable):

  • Maynard Building
    • Departments include: Mathematics, Computer Science and Information Technology
  • McCord Building
    • Departments include: Geosciences
  • Sundquist Science Complex
    • Departments include: Agriculture, Allied Health Sciences, Biology, Chemistry, Physics, Engineering and Astronomy
  • Technology Building
    • Departments include: Engineering Technology, Dean’s Office
  • Woodward Library

Remember that it is also important to have the main campus roads or sidewalks from one venue to another digitized so visitors can determine how to move around campus.

In this exercise you will:

  • Learn to create polygon and polyline data
  • Work with additional open-source software to create data (R directions only)
  • Connect to previously developed datasets
  • Edit and add information to the attribute table
  • Develop complex, multi-part symbology
  • Add informative text to enhance the usability

Software specific directions can be found for each step below. Please submit the answer to the questions and your final map by the due date.

1.1 Step One: The Data

You will need to use aerial imagery for this exercise in order to identify the various buildings and parking locations on campus. The information contained in the link in the introduction should provide you all of the basic information. Adding Montgomery County or the county/state datasets for Tennessee from previous exercises might help to provide location information but is not necessarily required.

View Directions in ArcGIS Pro

After setting up your project folder for this exercise, use the steps from Exercise 6, Step 1 or previous exercises to change the basemap to Imagery or another useful basemap from the available options. With this new basemap set, follow the same directions for Creating Point Data found in Exercise 6 to open the Catalog Pane, navigate to your project folder, and Create a New Shapefile. While the steps will be identical, in the Create Feature Class pane one option will be different. After selecting a feature class location and feature class name, be sure to choose polygon as the geometry type. Because you are digitizing buildings in this exercise you need to select polygon as the appropriate geometry. In a later step you will follow these same directions to create polyline (line) data.

Create New Polygon Shapefile

After clicking Run the new shapefile should have been added to the table of contents. If not add it now and zoom in on the imagery basemap to campus. Remember, if you are unable to find campus you can use the Go To XY button on the Map Tab and type in the following coordinates: -87.35, 36.53 and use Flash Location to find Clarksville, TN.

Now that you have zoomed to campus you can begin to develop the polygons. When creating polygons I find that changing the polygon fill to no color and using a bright outline helps to better visualize the information being created. Next, navigate to the Edit Tab and click on the drop-down beneath Snapping and select Snapping Settings…. Snapping tolerance sets the distance at which two points will be snapped together. This is really important when trying to close or avoid closing a polygon. In the Snapping Settings window, change the XY tolerance to 1 map units and click OK. Next, click on the Create button on the Edit Tab. In the Create Features pane that opens on the right of the screen click on the “Create a polygon feature” button Create new polygon feature and notice that your cursor now become a cross hairs. Place the target over one corner of the Dunn Center and click. This will create the first vertex for the polygon. Move to the next inside or outside corner and click again. Continue this process until you have created the outline of the building. Your final polygon for the Dunn Center should have 12 vertices (plural of vertex). Double-click or click F2 on the keyboard to finish digitizing the polygon. With the Dunn Center completed, move on to one of the other venues.

Sketch Polygon Shapefile

The most common mistake to make when digitizing is to accidentally place a vertex. If this occurs you can simply right-click on the vertex while digitizing and click delete vertex. Alternatively you can click the ESC button on your keyboard to start over completely. However, once you get accustom to digitizing or if you have finished a sketch and realize you need to make edits this can be done by clicking the Modify button Modify feature on the Edit Tab. This will provide a number of editing features. The most frequently used option is the Edit Vertices button Edit Vertices. After clicking, the menu at the bottom of the image will change and allow you to add vertices Add Vertices or delete vertices Delete Vertices. After adding a vertex you can mouse over the new point and see your cursor change to a directional symbol (four opposite facing triangles). Click, drag, and move the new/previously created vertex to a new location and click the finish sketch button Finish Sketch when you are finished editing.

Edit Polygon Shapefile

Remember it is important to save often! Us the Save Edits button Finish Sketch on the Edit Tab to make sure your data is saved. Continue to create all of the remaining venues. Afterwards you should create a new polygon dataset for CoSTEM Buildings and another for parking lots. Because the Sundquist Science Complex was created as part of the venues you have a several future options for the future display: 1. You can select only the SSC from your venues, create a new shapefile, and merge it to the CoSTEM Buildings dataset, 2. Use text when necessary to indicate which category that building is applied to, or 3. Create a new shapefile from the SSC Building and give it multi-part symbology to indicate its relationship to multiple categories when appropriate.

Question No. 1
How many vertices were used to create the Foy Center?

View directions in QGIS

Blah…blah…blah…

Question No. 1
Insert Text Here

View directions in R

Before you begin, you will need to open the Ex2 Colab Notebook and insert tocolab after github in the URL to open in the Colab Environment. As you have seen before, R requires various packages to complete certain analyses. In this exercise you will be using tidyverse, OpenStreetMaps, ggfortify, maptools, and rgeos. To install and load the packages we will use the following script:

Blah…blah…blah…

Question No. 1
Insert Text Here

1.2 Step Two: The Analyses

With datasets for the venues, CoSTEM buildings, and parking lots created, in this step you will develop a “transportation” layer and edit the attribute tables to provide options for categorizations when making the final map. For simplicity you can assume that all participants who do not make the final round will not remain on campus for the final judging and awards. However, all participants will attend the plenary speaker presentations and visit the vendor booths.

View Directions in ArcGIS Pro

With the different buildings and parking lots digitized you need to help visitors determine how to get to and from each venue as well as the best location to park for each activity. So while the steps will essentially be the same as in Step 1 of this exercise, except using a polyline, you need to take time to think about what lines will be required for your visualization. During the event you have two groups of participants, moving to similar and dissimilar locations, and various options for parking that are more applicable to some participants than others. You should think about some individual scenarios, for example: “I’m a middle school student family, presenting in the SSC, who will need to attend a plenary presentation, and visit the MUC” or “I’m a high school student family, presenting in the Dunn Center, who will attend the plenary session, and visit the MUC” because each of these scenarios requires a different transportation plan. So think about all of the possible scenarios before digitizing the data so you can make only the most necessary polylines for the map.

Create Polyline Shapefile

Next, with each of the datasets you have created, follow the steps at the end of Exercise 6, Step 2 to edit the attribute tables. Think about some of the important attributes each dataset should contain. For example, buildings should have a field for names and maybe the round they will be used, while your polylines might need a field for the type of participant that it is meant for. Be sure when you add each field you think about the data type (numeric value, date, text) that would be most appropriate.

Question No. 2
What is the minimum number of polylines necessary to create a “transportation” plan for each type of participant scenario

View Directions in QGIS

Blah…blah…blah…

Question No. 2
Insert Text Here

View Directions in R

Blah…blah…blah…

Question No. 2
Insert Text Here

1.3 Step Three: The Visualization

In this step you will use previous examples and your own design concepts to create a visualization that can be distributed to all Middle Tennessee Science and Engineering Fair participants as part of their “Before Arriving at the MTSEF…” packet they receive after placing in their regional events. You may need to use various inset maps or other methods to ensure all necessary information is available.

View directions in ArcGIS Pro

Similar to the previous exercise there will not be an example provided for how this map could be designed. Because there are various ways to organize and present the data you will need to consider the best way to present this information for the MTSEF participants. However, this map will likely include the most text and labeling of all previous exercises so far. As mentioned before, because of the difficulties with label organization on various maps, some cartographers prefer to manually label items so their precise positioning can be controlled better than if placed by the software. Remember that you can alter transparency levels on any dataset, change basemap, etc. to make the necessary customizations to help with legibility and provide the most useful map for the participant families.

Question No. 3
Describe some of the difficulties you encountered with creating this map with the various scenarios for different participants

View directions in QGIS

Blah…blah…blah…

Question No. 3
Insert Text Here

View directions in R

Blah…blah…blah…

Question No. 3
Insert Text Here

1.4 Step Four: The Full Experience

After seeing your draft and speaking with the APSU Dining Services Director, the CoSTEM Dean thought that it would be beneficial to also include some on-campus dining locations on the map. The dean and director of dining services made a plan to keep only the locations in the MUC open for the duration of the MTSEF so families would have access to lunch options while on campus. Since you already have this information the dean thought it would be a simple request.

View directions in ArcGIS Pro

Following the steps in Exercise 5, Step 1 to “add a folder connection”, connect to your Exercise 6 project folder and add the on-campus dining locations you created. Select only the dining locations inside the MUC and export the subset data to your current project folder. Now you can remove the full on-campus dining dataset. With all of the datasets needed to create the final map, finish the visualization for the dean’s final approval.

Question No. 4
Insert Text Here

View directions in QGIS

Blah…blah…blah…

Question No. 4
Insert Text Here

View directions in R

Blah…blah…blah…

Question No. 4
Insert Text Here

2 The Write-Up

In the presentation of the map you provide to the CoSTEM Dean please provide the following information:

  • Describe how the various components of the final map (legend, text, symbols, etc.) are used by the middle school or high school participants at the MTSEF to navigate campus.
  • Propose to the dean the creation of a “similar style” map for incoming CoSTEM freshman that could be provided to them in their STEM-focused APSU 1000 courses.
    • What datasets would be included?
    • What information would you need from the dean’s office?
    • How would this be beneficial for incoming students to feel like part of the college or their specific department?

When complete, send a link to your Colab Notebook or word document with answers to Questions 1-4 and your completed map via email.

LS0tDQp0aXRsZTogIkV4ZXJjaXNlIDc6IENyZWF0aW5nIExpbmVzIGFuZCBQb2x5Z29ucyA8YnI+PHNtYWxsPkdlb2dyYXBoaWMgSW5mb3JtYXRpb24gU3lzdGVtcyAxIExhYjwvc21hbGw+PC9icj4iDQphdXRob3I6ICJHRU9HIDMxNTAiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6DQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgcm93cy5wcmludDogMTANCiAgICB0aGVtZTogY29zbW8NCiAgICBoaWdobGlnaHQ6IGJyZWV6ZWRhcmsNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0Og0KICAgICAgY29sbGFwc2VkOiBubw0KICAgICAgc21vb3RoX3Njcm9sbDogeWVzDQogIHBkZl9kb2N1bWVudDogZGVmYXVsdA0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQplZGl0b3Jfb3B0aW9uczoNCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQ0KICBtb2RlOiBnZm0NCi0tLQ0KDQpgYGB7PWh0bWx9DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KDQpoMS50aXRsZSB7DQogIGZvbnQtc2l6ZTogNDBweDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICBmb250LXNpemU6IDIwcHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KYm9keSB7DQogIGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2E7DQogIGZvbnQtc2l6ZTogMTJwdDsNCn0NCg0KLnpvb20gew0KICB0cmFuc2Zvcm0tb3JpZ2luOiA0MCUgNTAlIDA7DQogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMnM7DQogIG1hcmdpbjogMCBhdXRvOw0KfQ0KLnpvb20gaW1new0KCXdpZHRoOmF1dG87DQoJaGVpZ2h0OmF1dG87CQ0KfQ0KLnpvb206aG92ZXIgew0KICB0cmFuc2Zvcm06IHNjYWxlKDIpOw0KfQ0KDQp0aCwgdGQge3BhZGRpbmc6IDVweDt9DQoNCjwvc3R5bGU+DQpgYGANCjxocj48L2hyPg0KDQpUaGUgcHVycG9zZSBvZiB0aGlzIGV4ZXJjaXNlIGlzIHRvIHRlYWNoIG1ldGhvZHMgb2YgY3JlYXRpbmcgcG9seWdvbiBhbmQgcG9seWxpbmUgZGF0YSBmb3IgZGlzcGxheSBpbiB2YXJpb3VzIHByb2dyYW1zLiBUaGVzZSBza2lsbHMgd2lsbCBoZWxwIHlvdSB1bmRlcnN0YW5kIHRoZSBmb3VuZGF0aW9uIG9mIHZlY3RvciBkYXRhLCBjcmVhdGlvbiBvZiBuZXcgcG9seWdvbiBhbmQgcG9seWxpbmUgZGF0YXNldHMsIGFuZCBlZGl0aW5nIGF0dHJpYnV0ZSB0YWJsZXMuDQoNCiMgVGhlIEludHJvZHVjdGlvbg0KDQpUaGUgW0F1c3RpbiBQZWF5IFN0YXRlIFVuaXZlcnNpdHkgLSBDb2xsZWdlIG9mIFNjaWVuY2UsIFRlY2hub2xvZ3ksIEVuZ2luZWVyaW5nLCBhbmQgTWF0aGVtYXRpY3NdKGh0dHBzOi8vd3d3LmFwc3UuZWR1L2Nvc3RlbS8pIHdpbGwgYmUgaG9zdGluZyB0aGUgdXBjb21pbmcgW01pZGRsZSBUZW5uZXNzZWUgU2NpZW5jZSBhbmQgRW5naW5lZXJpbmcgRmFpcl0oaHR0cHM6Ly93d3cubXRzZWYub3JnL2Fib3V0KSBpbiB0aGUgU3ByaW5nIHNlbWVzdGVyLiBJbiBwcmVwYXJhdGlvbiBmb3IgdGhpcyBsYXJnZSBldmVudCwgdGhlIFtEZWFuIG9mIENvU1RFTV0oaHR0cHM6Ly93d3cuYXBzdS5lZHUvY29zdGVtL2RlYW4td2VsY29tZS5waHApIGhhcyBhc2tlZCB5b3UgdG8gZGV2ZWxvcCBhIGN1c3RvbSBtYXAgb2YgY2FtcHVzIHRoYXQgbm90IG9ubHkgc2hvd3MgdGhlIHNwZWNpZmljIHZlbnVlcyBidXQgYWxzbyBoZWxwcyB0byBoaWdobGlnaHQgdGhlIGNvbGxlZ2UuIFRoaXMgaXMgYSBtYWpvciByZWNydWl0aW5nIGV2ZW50IGZvciBoaWdoIHNjaG9vbCBzdHVkZW50cyBzbyB0aGUgZGVhbiB3YW50cyB0byBtYWtlIHN1cmUgcGFydGljaXBhbnRzIGFyZSBhYmxlIHRvIHZpc2l0IGNhbXB1cyBidWlsZGluZ3MgdGhhdCBob3VzZSBTVEVNIGRlcGFydG1lbnRzIGFuZCBvdGhlciBmYWNpbGl0aWVzIHRoYXQgc3VwcG9ydCByZXNlYXJjaCBvciBzdHVkZW50IGludGVyZXN0cy4gVGhlIG1hcCBzaG91bGQgYWxzbyBoaWdobGlnaHQgdGhlIHZhcmlvdXMgdmVudWVzIGJlaW5nIHVzZWQgZm9yIHRoZSBldmVudCBhbmQgYWNjZXNzaWJsZSBwYXJraW5nIGxvY2F0aW9ucyBmb3IgZWFjaCBidWlsZGluZy4NCg0KVGhlIGZvbGxvd2luZyBsb2NhdGlvbnMgbmVlZCB0byBiZSBpbmNsdWRlZCBvbiB0aGUgbWFwIGFuZCBoaWdobGlnaHRlZCB2aWEgdGV4dCBvciBsZWdlbmQgb24gdGhlIG1hcDoNCg0KLSBQcmVsaW1pbmFyeSBSb3VuZCBWZW51ZXM6IHRoZSAqKkR1bm4gQ2VudGVyKiogYW5kICoqRm95IENlbnRlcioqIGZvciBoaWdoIHNjaG9vbCBwYXJ0aWNpcGFudHMsIGFuZCB0aGUgKipTdW5kcXVpc3QgU2NpZW5jZSBDZW50ZXIqKiAtIEF0cml1bSBmb3IgbWlkZGxlIHNjaG9vbCBwYXJ0aWNpcGFudHMNCiAgLSBQcmVsaW1pbmFyeSByb3VuZHMgd2lsbCBiZSBoZWxkIGZyb20gOGFtIHRvIDEwYW0NCiAgICAtIF9EdW5uIENlbnRlcl8gcGFya2luZyBsb3RzIGluY2x1ZGU6IDIsIDMsIDYsIDUwLCA1MQ0KICAgIC0gX0ZveSBDZW50ZXJfIHBhcmtpbmcgbG90cyBpbmNsdWRlOiA2LCA4MyANCi0gUGxlbmFyeSBTcGVha2VyIFZlbnVlczogKipDbGVtZW50IEF1ZGl0b3JpdW0qKiBpbiB0aGUgQ2xlbWVudCBCdWlsZGluZyBmb3IgdGhlIG1pZGRsZSBzY2hvb2wgcGFydGljaXBhbnRzIGFuZCB0aGUgKipNYWJyeSBDb25jZXJ0IEhhbGwqKiBpbiB0aGUgTXVzaWMvTWFzcyBDb21tdW5pY2F0aW9uIEJ1aWxkaW5nIGZvciB0aGUgaGlnaCBzY2hvb2wgcGFydGljaXBhbnRzDQogIC0gVGhlc2UgcHJlc2VudGF0aW9ucyB3aWxsIG9jY3VyIGZyb20gMTA6MzAgYW0gdG8gMTJwbS4NCiAgICAtIF9DbGVtZW50XyBwYXJraW5nIGxvdHMgaW5jbHVkZTogMTAsIDExLCA0MCwgNDMNCiAgICAtIF9NTUNfIHBhcmtpbmcgbG90cyBpbmNsdWRlOiA3LCA4LCA0MywgNDUNCi0gVmVuZG9yIGFuZCBJbmZvcm1hdGlvbmFsIExvY2F0aW9uczogKipNb3JnYW4gVW5pdmVyc2l0eSBDZW50ZXIqKiwgU2Vjb25kIEZsb29yLCBNYWluIExvYmJ5IChyZW1lbWJlciB0aGUgMl5uZF4gZmxvb3IgaXMgd2hlcmUgbW9zdCBzdHVkZW50cyBlbnRlciB0aGUgTVVDKQ0KICAtIFZlbmRvciBib290aHMgd2lsbCBiZSBhdmFpbGFibGUgZnJvbSAxMnBtIHRvIDJwbQ0KLSBGaW5hbCBSb3VuZCBhbmQgQXdhcmRzIGZvciBhbGwgYWdlIGdyb3VwczogKipNb3JnYW4gVW5pdmVyc2l0eSBDZW50ZXIgQmFsbHJvb20qKiAoM3JkIEZsb29yKQ0KICAtIFRoZSBmaW5hbCByb3VuZCB3aWxsIGJlIGhlbGQgZnJvbSAyOjMwcG0gdG8gNHBtIHdpdGggYXdhcmRzIGltbWVkaWF0ZWx5IGZvbGxvd2luZw0KICAgIC0gX01VQ18gcGFya2luZyBsb3RzIGluY2x1ZGU6IDQwLCA0MywgNDUsIDgyLCA4Mw0KDQpSZWZlciB0byB0aGUgaW5mb3JtYXRpb24gb24gdGhlIFtDYW1wdXMgTWFwc10oaHR0cHM6Ly93d3cuYXBzdS5lZHUvbWFwL2luZGV4LnBocCkgcGFnZSBvZiB0aGUgQVBTVSB3ZWJzaXRlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidWlsZGluZyBuYW1lcyBhbmQgcGFya2luZyBsb3QgbnVtYmVycy4NCg0KQWRkaXRpb25hbGx5LCB0aGUgZGVhbiB3b3VsZCBsaWtlIHlvdSB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgU1RFTSBidWlsZGluZ3MgYW5kIHdoYXQgZGVwYXJ0bWVudHMgY2FuIGJlIGZvdW5kIGluIGVhY2ggKHdoZW4gYXBwbGljYWJsZSk6DQoNCi0gKipNYXluYXJkIEJ1aWxkaW5nKioNCiAgLSBfRGVwYXJ0bWVudHMgaW5jbHVkZTpfIE1hdGhlbWF0aWNzLCBDb21wdXRlciBTY2llbmNlIGFuZCBJbmZvcm1hdGlvbiBUZWNobm9sb2d5DQotICoqTWNDb3JkIEJ1aWxkaW5nKioNCiAgLSBfRGVwYXJ0bWVudHMgaW5jbHVkZTpfIEdlb3NjaWVuY2VzDQotICoqU3VuZHF1aXN0IFNjaWVuY2UgQ29tcGxleCoqDQogIC0gX0RlcGFydG1lbnRzIGluY2x1ZGU6XyBBZ3JpY3VsdHVyZSwgQWxsaWVkIEhlYWx0aCBTY2llbmNlcywgQmlvbG9neSwgQ2hlbWlzdHJ5LCBQaHlzaWNzLCBFbmdpbmVlcmluZyBhbmQgQXN0cm9ub215DQotICoqVGVjaG5vbG9neSBCdWlsZGluZyoqDQogIC0gX0RlcGFydG1lbnRzIGluY2x1ZGU6XyAgRW5naW5lZXJpbmcgVGVjaG5vbG9neSwgRGVhbidzIE9mZmljZQ0KLSAqKldvb2R3YXJkIExpYnJhcnkqKg0KDQpSZW1lbWJlciB0aGF0IGl0IGlzIGFsc28gaW1wb3J0YW50IHRvIGhhdmUgdGhlIG1haW4gY2FtcHVzIHJvYWRzIG9yIHNpZGV3YWxrcyBmcm9tIG9uZSB2ZW51ZSB0byBhbm90aGVyIGRpZ2l0aXplZCBzbyB2aXNpdG9ycyBjYW4gZGV0ZXJtaW5lIGhvdyB0byBtb3ZlIGFyb3VuZCBjYW1wdXMuDQoNCkluIHRoaXMgZXhlcmNpc2UgeW91IHdpbGw6DQoNCi0gICBMZWFybiB0byBjcmVhdGUgcG9seWdvbiBhbmQgcG9seWxpbmUgZGF0YQ0KLSAgIFdvcmsgd2l0aCBhZGRpdGlvbmFsIG9wZW4tc291cmNlIHNvZnR3YXJlIHRvIGNyZWF0ZSBkYXRhIChSIGRpcmVjdGlvbnMgb25seSkNCi0gICBDb25uZWN0IHRvIHByZXZpb3VzbHkgZGV2ZWxvcGVkIGRhdGFzZXRzDQotICAgRWRpdCBhbmQgYWRkIGluZm9ybWF0aW9uIHRvIHRoZSBhdHRyaWJ1dGUgdGFibGUNCi0gICBEZXZlbG9wIGNvbXBsZXgsIG11bHRpLXBhcnQgc3ltYm9sb2d5DQotICAgQWRkIGluZm9ybWF0aXZlIHRleHQgdG8gZW5oYW5jZSB0aGUgdXNhYmlsaXR5IA0KDQpTb2Z0d2FyZSBzcGVjaWZpYyBkaXJlY3Rpb25zIGNhbiBiZSBmb3VuZCBmb3IgZWFjaCBzdGVwIGJlbG93LiBQbGVhc2Ugc3VibWl0IHRoZSBhbnN3ZXIgdG8gdGhlIHF1ZXN0aW9ucyBhbmQgeW91ciBmaW5hbCBtYXAgYnkgdGhlIGR1ZSBkYXRlLg0KDQojIyBTdGVwIE9uZTogVGhlIERhdGENCg0KWW91IHdpbGwgbmVlZCB0byB1c2UgYWVyaWFsIGltYWdlcnkgZm9yIHRoaXMgZXhlcmNpc2UgaW4gb3JkZXIgdG8gaWRlbnRpZnkgdGhlIHZhcmlvdXMgYnVpbGRpbmdzIGFuZCBwYXJraW5nIGxvY2F0aW9ucyBvbiBjYW1wdXMuIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIGxpbmsgaW4gdGhlIGludHJvZHVjdGlvbiBzaG91bGQgcHJvdmlkZSB5b3UgYWxsIG9mIHRoZSBiYXNpYyBpbmZvcm1hdGlvbi4gQWRkaW5nIE1vbnRnb21lcnkgQ291bnR5IG9yIHRoZSBjb3VudHkvc3RhdGUgZGF0YXNldHMgZm9yIFRlbm5lc3NlZSBmcm9tIHByZXZpb3VzIGV4ZXJjaXNlcyBtaWdodCBoZWxwIHRvIHByb3ZpZGUgbG9jYXRpb24gaW5mb3JtYXRpb24gYnV0IGlzIG5vdCBuZWNlc3NhcmlseSByZXF1aXJlZC4NCg0KPGRldGFpbHM+DQo8c3VtbWFyeT48YmlnPlZpZXcgRGlyZWN0aW9ucyBpbiA8Yj4gW0FyY0dJUyBQcm9de3N0eWxlPSJjb2xvcjojZmY0NTAwIn0gPC9iPjwvYmlnPjwvc3VtbWFyeT4NCg0KQWZ0ZXIgc2V0dGluZyB1cCB5b3VyIHByb2plY3QgZm9sZGVyIGZvciB0aGlzIGV4ZXJjaXNlLCB1c2UgdGhlIHN0ZXBzIGZyb20gW0V4ZXJjaXNlIDYsIFN0ZXAgMV0oaHR0cHM6Ly9jaHJpc21nZW50cnkuZ2l0aHViLmlvL0dJUzEtRXhlcmNpc2UtNi8jMTFfU3RlcF9PbmU6X1RoZV9EYXRhKSBvciBwcmV2aW91cyBleGVyY2lzZXMgdG8gY2hhbmdlIHRoZSBiYXNlbWFwIHRvIF9JbWFnZXJ5XyBvciBhbm90aGVyIHVzZWZ1bCBiYXNlbWFwIGZyb20gdGhlIGF2YWlsYWJsZSBvcHRpb25zLiBXaXRoIHRoaXMgbmV3IGJhc2VtYXAgc2V0LCBmb2xsb3cgdGhlIHNhbWUgZGlyZWN0aW9ucyBmb3IgW0NyZWF0aW5nIFBvaW50IERhdGFdKGh0dHBzOi8vY2hyaXNtZ2VudHJ5LmdpdGh1Yi5pby9HSVMxLUV4ZXJjaXNlLTYvIzFfVGhlX0ludHJvZHVjdGlvbikgZm91bmQgaW4gW0V4ZXJjaXNlIDZdKGh0dHBzOi8vY2hyaXNtZ2VudHJ5LmdpdGh1Yi5pby9HSVMxLUV4ZXJjaXNlLTYpIHRvIG9wZW4gdGhlIF9DYXRhbG9nIFBhbmVfLCBuYXZpZ2F0ZSB0byB5b3VyIHByb2plY3QgZm9sZGVyLCBhbmQgX0NyZWF0ZSBhIE5ldyBTaGFwZWZpbGVfLiBXaGlsZSB0aGUgc3RlcHMgd2lsbCBiZSBpZGVudGljYWwsIGluIHRoZSAqKkNyZWF0ZSBGZWF0dXJlIENsYXNzKiogcGFuZSBvbmUgb3B0aW9uIHdpbGwgYmUgZGlmZmVyZW50LiBBZnRlciBzZWxlY3RpbmcgYSBfZmVhdHVyZSBjbGFzcyBsb2NhdGlvbl8gYW5kIF9mZWF0dXJlIGNsYXNzIG5hbWVfLCBiZSBzdXJlIHRvIGNob29zZSAqKnBvbHlnb24qKiBhcyB0aGUgX2dlb21ldHJ5IHR5cGVfLiBCZWNhdXNlIHlvdSBhcmUgZGlnaXRpemluZyBidWlsZGluZ3MgaW4gdGhpcyBleGVyY2lzZSB5b3UgbmVlZCB0byBzZWxlY3QgcG9seWdvbiBhcyB0aGUgYXBwcm9wcmlhdGUgZ2VvbWV0cnkuIEluIGEgbGF0ZXIgc3RlcCB5b3Ugd2lsbCBmb2xsb3cgdGhlc2Ugc2FtZSBkaXJlY3Rpb25zIHRvIGNyZWF0ZSAqKnBvbHlsaW5lKiogKGxpbmUpIGRhdGEuDQoNCjxwIGFsaWduPSJjZW50ZXIiPjxkaXYgY2xhc3M9Inpvb20iPjxpbWcgc3JjPSAiSW1hZ2VzL2FyY2dpcy1jcmVhdGUtbmV3LXBvbHlnb24ucG5nIiBhbHQ9IkNyZWF0ZSBOZXcgUG9seWdvbiBTaGFwZWZpbGUiIHN0eWxlPSJ3aWR0aDoxMDAlIj48L2Rpdj48L3A+DQoNCkFmdGVyIGNsaWNraW5nIF9SdW5fIHRoZSBuZXcgc2hhcGVmaWxlIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiBJZiBub3QgYWRkIGl0IG5vdyBhbmQgem9vbSBpbiBvbiB0aGUgaW1hZ2VyeSBiYXNlbWFwIHRvIGNhbXB1cy4gUmVtZW1iZXIsIGlmIHlvdSBhcmUgdW5hYmxlIHRvIGZpbmQgY2FtcHVzIHlvdSBjYW4gdXNlIHRoZSAqKkdvIFRvIFhZKiogYnV0dG9uIG9uIHRoZSBfTWFwIFRhYl8gYW5kIHR5cGUgaW4gdGhlIGZvbGxvd2luZyBjb29yZGluYXRlczogYC04Ny4zNSwgMzYuNTNgIGFuZCB1c2UgX0ZsYXNoIExvY2F0aW9uXyB0byBmaW5kIENsYXJrc3ZpbGxlLCBUTi4NCg0KTm93IHRoYXQgeW91IGhhdmUgem9vbWVkIHRvIGNhbXB1cyB5b3UgY2FuIGJlZ2luIHRvIGRldmVsb3AgdGhlIHBvbHlnb25zLiBXaGVuIGNyZWF0aW5nIHBvbHlnb25zIEkgZmluZCB0aGF0IGNoYW5naW5nIHRoZSBwb2x5Z29uIGZpbGwgdG8gKipubyBjb2xvcioqIGFuZCB1c2luZyBhIGJyaWdodCBvdXRsaW5lIGhlbHBzIHRvIGJldHRlciB2aXN1YWxpemUgdGhlIGluZm9ybWF0aW9uIGJlaW5nIGNyZWF0ZWQuIE5leHQsIG5hdmlnYXRlIHRvIHRoZSBfRWRpdCBUYWJfIGFuZCBjbGljayBvbiB0aGUgZHJvcC1kb3duIGJlbmVhdGggKipTbmFwcGluZyoqIGFuZCBzZWxlY3QgX1NuYXBwaW5nIFNldHRpbmdzLi4uXy4gU25hcHBpbmcgdG9sZXJhbmNlIHNldHMgdGhlIGRpc3RhbmNlIGF0IHdoaWNoIHR3byBwb2ludHMgd2lsbCBiZSBzbmFwcGVkIHRvZ2V0aGVyLiBUaGlzIGlzIHJlYWxseSBpbXBvcnRhbnQgd2hlbiB0cnlpbmcgdG8gY2xvc2Ugb3IgYXZvaWQgY2xvc2luZyBhIHBvbHlnb24uIEluIHRoZSBfU25hcHBpbmcgU2V0dGluZ3NfIHdpbmRvdywgY2hhbmdlIHRoZSBYWSB0b2xlcmFuY2UgdG8gMSBtYXAgdW5pdHMgYW5kIGNsaWNrIE9LLiBOZXh0LCBjbGljayBvbiB0aGUgKipDcmVhdGUqKiBidXR0b24gb24gdGhlIF9FZGl0IFRhYl8uIEluIHRoZSBfQ3JlYXRlIEZlYXR1cmVzXyBwYW5lIHRoYXQgb3BlbnMgb24gdGhlIHJpZ2h0IG9mIHRoZSBzY3JlZW4gY2xpY2sgb24gdGhlICJDcmVhdGUgYSBwb2x5Z29uIGZlYXR1cmUiIGJ1dHRvbiA8aW1nIHNyYz0gIkltYWdlcy9hcmNnaXMtY3JlYXRlLXBvbHlnb24tZmVhdHVyZS1idXR0b24uanBnIiBhbHQ9IkNyZWF0ZSBuZXcgcG9seWdvbiBmZWF0dXJlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPiBhbmQgbm90aWNlIHRoYXQgeW91ciBjdXJzb3Igbm93IGJlY29tZSBhIGNyb3NzIGhhaXJzLiBQbGFjZSB0aGUgdGFyZ2V0IG92ZXIgb25lIGNvcm5lciBvZiB0aGUgRHVubiBDZW50ZXIgYW5kIGNsaWNrLiBUaGlzIHdpbGwgY3JlYXRlIHRoZSBmaXJzdCAqKnZlcnRleCoqIGZvciB0aGUgcG9seWdvbi4gTW92ZSB0byB0aGUgbmV4dCBpbnNpZGUgb3Igb3V0c2lkZSBjb3JuZXIgYW5kIGNsaWNrIGFnYWluLiBDb250aW51ZSB0aGlzIHByb2Nlc3MgdW50aWwgeW91IGhhdmUgY3JlYXRlZCB0aGUgb3V0bGluZSBvZiB0aGUgYnVpbGRpbmcuIFlvdXIgZmluYWwgcG9seWdvbiBmb3IgdGhlIER1bm4gQ2VudGVyIHNob3VsZCBoYXZlIDEyIHZlcnRpY2VzIChwbHVyYWwgb2YgdmVydGV4KS4gRG91YmxlLWNsaWNrIG9yIGNsaWNrIEYyIG9uIHRoZSBrZXlib2FyZCB0byBmaW5pc2ggZGlnaXRpemluZyB0aGUgcG9seWdvbi4gV2l0aCB0aGUgRHVubiBDZW50ZXIgY29tcGxldGVkLCBtb3ZlIG9uIHRvIG9uZSBvZiB0aGUgb3RoZXIgdmVudWVzLiANCg0KPHAgYWxpZ249ImNlbnRlciI+PGRpdiBjbGFzcz0iem9vbSI+PGltZyBzcmM9ICJJbWFnZXMvYXJjZ2lzLXNrZXRjaC1wb2x5Z29uLnBuZyIgYWx0PSJTa2V0Y2ggUG9seWdvbiBTaGFwZWZpbGUiIHN0eWxlPSJ3aWR0aDoxMDAlIj48L2Rpdj48L3A+DQoNClRoZSBtb3N0IGNvbW1vbiBtaXN0YWtlIHRvIG1ha2Ugd2hlbiBkaWdpdGl6aW5nIGlzIHRvIGFjY2lkZW50YWxseSBwbGFjZSBhIHZlcnRleC4gSWYgdGhpcyBvY2N1cnMgeW91IGNhbiBzaW1wbHkgcmlnaHQtY2xpY2sgb24gdGhlIHZlcnRleCB3aGlsZSBkaWdpdGl6aW5nIGFuZCBjbGljayAqKmRlbGV0ZSB2ZXJ0ZXgqKi4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGNsaWNrIHRoZSBFU0MgYnV0dG9uIG9uIHlvdXIga2V5Ym9hcmQgdG8gc3RhcnQgb3ZlciBjb21wbGV0ZWx5LiBIb3dldmVyLCBvbmNlIHlvdSBnZXQgYWNjdXN0b20gdG8gZGlnaXRpemluZyBvciBpZiB5b3UgaGF2ZSBmaW5pc2hlZCBhIHNrZXRjaCBhbmQgcmVhbGl6ZSB5b3UgbmVlZCB0byBtYWtlIGVkaXRzIHRoaXMgY2FuIGJlIGRvbmUgYnkgY2xpY2tpbmcgdGhlICoqTW9kaWZ5KiogYnV0dG9uIDxpbWcgc3JjPSAiSW1hZ2VzL2FyY2dpcy1tb2RpZnktZmVhdHVyZS1idXR0b24uanBnIiBhbHQ9Ik1vZGlmeSBmZWF0dXJlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPiBvbiB0aGUgX0VkaXQgVGFiXy4gVGhpcyB3aWxsIHByb3ZpZGUgYSBudW1iZXIgb2YgZWRpdGluZyBmZWF0dXJlcy4gVGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIG9wdGlvbiBpcyB0aGUgKipFZGl0IFZlcnRpY2VzKiogYnV0dG9uIDxpbWcgc3JjPSAiSW1hZ2VzL2FyY2dpcy1lZGl0LXZlcnRpY2VzLWJ1dHRvbi5qcGciIGFsdD0iRWRpdCBWZXJ0aWNlcyIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIj4uIEFmdGVyIGNsaWNraW5nLCB0aGUgbWVudSBhdCB0aGUgYm90dG9tIG9mIHRoZSBpbWFnZSB3aWxsIGNoYW5nZSBhbmQgYWxsb3cgeW91IHRvICoqYWRkIHZlcnRpY2VzKiogPGltZyBzcmM9ICJJbWFnZXMvYXJjZ2lzLWFkZC12ZXJ0ZXgtYnV0dG9uLmpwZyIgYWx0PSJBZGQgVmVydGljZXMiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+IG9yICoqZGVsZXRlIHZlcnRpY2VzKiogPGltZyBzcmM9ICJJbWFnZXMvYXJjZ2lzLWRlbGV0ZS12ZXJ0ZXgtYnV0dG9uLmpwZyIgYWx0PSJEZWxldGUgVmVydGljZXMiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+LiBBZnRlciBhZGRpbmcgYSB2ZXJ0ZXggeW91IGNhbiBtb3VzZSBvdmVyIHRoZSBuZXcgcG9pbnQgYW5kIHNlZSB5b3VyIGN1cnNvciBjaGFuZ2UgdG8gYSBkaXJlY3Rpb25hbCBzeW1ib2wgKGZvdXIgb3Bwb3NpdGUgZmFjaW5nIHRyaWFuZ2xlcykuIENsaWNrLCBkcmFnLCBhbmQgbW92ZSB0aGUgbmV3L3ByZXZpb3VzbHkgY3JlYXRlZCB2ZXJ0ZXggdG8gYSBuZXcgbG9jYXRpb24gYW5kIGNsaWNrIHRoZSAqKmZpbmlzaCBza2V0Y2gqKiBidXR0b24gPGltZyBzcmM9ICJJbWFnZXMvYXJjZ2lzLWZpbmlzaC1za2V0Y2gtYnV0dG9uLmpwZyIgYWx0PSJGaW5pc2ggU2tldGNoIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPiB3aGVuIHlvdSBhcmUgZmluaXNoZWQgZWRpdGluZy4NCg0KPHAgYWxpZ249ImNlbnRlciI+PGRpdiBjbGFzcz0iem9vbSI+PGltZyBzcmM9ICJJbWFnZXMvYXJjZ2lzLWVkaXQtcG9seWdvbi1za2V0Y2gucG5nIiBhbHQ9IkVkaXQgUG9seWdvbiBTaGFwZWZpbGUiIHN0eWxlPSJ3aWR0aDoxMDAlIj48L2Rpdj48L3A+DQoNClJlbWVtYmVyIGl0IGlzIGltcG9ydGFudCB0byBzYXZlIG9mdGVuISBVcyB0aGUgKipTYXZlIEVkaXRzKiogYnV0dG9uIDxpbWcgc3JjPSAiSW1hZ2VzL2FyY2dpcy1lZGl0cy1zYXZlLWJ1dHRvbi5qcGciIGFsdD0iRmluaXNoIFNrZXRjaCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIj4gb24gdGhlIF9FZGl0IFRhYl8gdG8gbWFrZSBzdXJlIHlvdXIgZGF0YSBpcyBzYXZlZC4gQ29udGludWUgdG8gY3JlYXRlIGFsbCBvZiB0aGUgcmVtYWluaW5nIHZlbnVlcy4gQWZ0ZXJ3YXJkcyB5b3Ugc2hvdWxkIGNyZWF0ZSBhIG5ldyBwb2x5Z29uIGRhdGFzZXQgZm9yIENvU1RFTSBCdWlsZGluZ3MgYW5kIGFub3RoZXIgZm9yIHBhcmtpbmcgbG90cy4gQmVjYXVzZSB0aGUgU3VuZHF1aXN0IFNjaWVuY2UgQ29tcGxleCB3YXMgY3JlYXRlZCBhcyBwYXJ0IG9mIHRoZSB2ZW51ZXMgeW91IGhhdmUgYSBzZXZlcmFsIGZ1dHVyZSBvcHRpb25zIGZvciB0aGUgZnV0dXJlIGRpc3BsYXk6IA0KMS4gICAgWW91IGNhbiBzZWxlY3Qgb25seSB0aGUgU1NDIGZyb20geW91ciB2ZW51ZXMsIGNyZWF0ZSBhIG5ldyBzaGFwZWZpbGUsIGFuZCBtZXJnZSBpdCB0byB0aGUgQ29TVEVNIEJ1aWxkaW5ncyBkYXRhc2V0LA0KMi4gICAgVXNlIHRleHQgd2hlbiBuZWNlc3NhcnkgdG8gaW5kaWNhdGUgd2hpY2ggY2F0ZWdvcnkgdGhhdCBidWlsZGluZyBpcyBhcHBsaWVkIHRvLCBvciANCjMuICAgIENyZWF0ZSBhIG5ldyBzaGFwZWZpbGUgZnJvbSB0aGUgU1NDIEJ1aWxkaW5nIGFuZCBnaXZlIGl0IG11bHRpLXBhcnQgc3ltYm9sb2d5IHRvIGluZGljYXRlIGl0cyByZWxhdGlvbnNoaXAgdG8gbXVsdGlwbGUgY2F0ZWdvcmllcyB3aGVuIGFwcHJvcHJpYXRlLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAxPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSG93IG1hbnkgdmVydGljZXMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgKipGb3kgQ2VudGVyKio/Xw0KPC9ibG9ja3F1b3RlPg0KDQo8L2RldGFpbHM+DQo8aHI+PC9ocj4NCg0KPGRldGFpbHM+DQo8c3VtbWFyeT48YmlnPlZpZXcgZGlyZWN0aW9ucyBpbiA8Yj4gW1FHSVNde3N0eWxlPSJjb2xvcjogIzAwNjQwMCJ9IDwvYj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAxPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KPGhyPjwvaHI+DQoNCjxkZXRhaWxzPjxzdW1tYXJ5PjxiaWc+VmlldyBkaXJlY3Rpb25zIGluIDxiPiBbUl17c3R5bGU9ImNvbG9yOiAjNjQ5NUVEIn0gPC9iPjwvc3Bhbj48L2JpZz48L3N1bW1hcnk+DQpCZWZvcmUgeW91IGJlZ2luLCB5b3Ugd2lsbCBuZWVkIHRvIG9wZW4gdGhlIFtFeDIgQ29sYWIgTm90ZWJvb2tdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc21nZW50cnkvR0lTMS1FeGVyY2lzZS03L2Jsb2IvbWFpbi9HSVMxX0VYNy5pcHluYikgYW5kIGluc2VydCAqKnRvY29sYWIqKiBhZnRlciBfZ2l0aHViXyBpbiB0aGUgVVJMIHRvIG9wZW4gaW4gdGhlIF9Db2xhYiBFbnZpcm9ubWVudF8uIEFzIHlvdSBoYXZlIHNlZW4gYmVmb3JlLCBSIHJlcXVpcmVzIHZhcmlvdXMgcGFja2FnZXMgdG8gY29tcGxldGUgY2VydGFpbiBhbmFseXNlcy4gSW4gdGhpcyBleGVyY2lzZSB5b3Ugd2lsbCBiZSB1c2luZyAqKnRpZHl2ZXJzZSwgT3BlblN0cmVldE1hcHMsIGdnZm9ydGlmeSwgbWFwdG9vbHMsIGFuZCByZ2VvcyoqLiBUbyBpbnN0YWxsIGFuZCBsb2FkIHRoZSBwYWNrYWdlcyB3ZSB3aWxsIHVzZSB0aGUgZm9sbG93aW5nIHNjcmlwdDoNCg0KQmxhaC4uLmJsYWguLi5ibGFoLi4uDQoNCjxiaWc+PGI+UXVlc3Rpb24gTm8uIDE8L2I+PC9iaWc+DQo8YmxvY2txdW90ZT4NCl9JbnNlcnQgVGV4dCBIZXJlXw0KPC9ibG9ja3F1b3RlPg0KDQo8L2RldGFpbHM+DQoNCiMjIFN0ZXAgVHdvOiBUaGUgQW5hbHlzZXMNCg0KV2l0aCBkYXRhc2V0cyBmb3IgdGhlIHZlbnVlcywgQ29TVEVNIGJ1aWxkaW5ncywgYW5kIHBhcmtpbmcgbG90cyBjcmVhdGVkLCBpbiB0aGlzIHN0ZXAgeW91IHdpbGwgZGV2ZWxvcCBhICJ0cmFuc3BvcnRhdGlvbiIgbGF5ZXIgYW5kIGVkaXQgdGhlIGF0dHJpYnV0ZSB0YWJsZXMgdG8gcHJvdmlkZSBvcHRpb25zIGZvciBjYXRlZ29yaXphdGlvbnMgd2hlbiBtYWtpbmcgdGhlIGZpbmFsIG1hcC4gRm9yIHNpbXBsaWNpdHkgeW91IGNhbiBhc3N1bWUgdGhhdCBhbGwgcGFydGljaXBhbnRzIHdobyBkbyBub3QgbWFrZSB0aGUgZmluYWwgcm91bmQgd2lsbCBub3QgcmVtYWluIG9uIGNhbXB1cyBmb3IgdGhlIGZpbmFsIGp1ZGdpbmcgYW5kIGF3YXJkcy4gSG93ZXZlciwgYWxsIHBhcnRpY2lwYW50cyB3aWxsIGF0dGVuZCB0aGUgcGxlbmFyeSBzcGVha2VyIHByZXNlbnRhdGlvbnMgYW5kIHZpc2l0IHRoZSB2ZW5kb3IgYm9vdGhzLg0KDQo8ZGV0YWlscz4NCjxzdW1tYXJ5PjxiaWc+VmlldyBEaXJlY3Rpb25zIGluIDxiPiBbQXJjR0lTIFByb117c3R5bGU9ImNvbG9yOiNmZjQ1MDAifSA8L2I+PC9iaWc+PC9zdW1tYXJ5Pg0KDQpXaXRoIHRoZSBkaWZmZXJlbnQgYnVpbGRpbmdzIGFuZCBwYXJraW5nIGxvdHMgZGlnaXRpemVkIHlvdSBuZWVkIHRvIGhlbHAgdmlzaXRvcnMgZGV0ZXJtaW5lIGhvdyB0byBnZXQgdG8gYW5kIGZyb20gZWFjaCB2ZW51ZSBhcyB3ZWxsIGFzIHRoZSBiZXN0IGxvY2F0aW9uIHRvIHBhcmsgZm9yIGVhY2ggYWN0aXZpdHkuIFNvIHdoaWxlIHRoZSBzdGVwcyB3aWxsIGVzc2VudGlhbGx5IGJlIHRoZSBzYW1lIGFzIGluIFtTdGVwIDFdKGh0dHBzOi8vY2hyaXNtZ2VudHJ5LmdpdGh1Yi5pby9HSVMxLUV4ZXJjaXNlLTcvIzExX1N0ZXBfT25lOl9UaGVfRGF0YSkgb2YgdGhpcyBleGVyY2lzZSwgZXhjZXB0IHVzaW5nIGEgcG9seWxpbmUsIHlvdSBuZWVkIHRvIHRha2UgdGltZSB0byB0aGluayBhYm91dCB3aGF0IGxpbmVzIHdpbGwgYmUgcmVxdWlyZWQgZm9yIHlvdXIgdmlzdWFsaXphdGlvbi4gRHVyaW5nIHRoZSBldmVudCB5b3UgaGF2ZSB0d28gZ3JvdXBzIG9mIHBhcnRpY2lwYW50cywgbW92aW5nIHRvIHNpbWlsYXIgYW5kIGRpc3NpbWlsYXIgbG9jYXRpb25zLCBhbmQgdmFyaW91cyBvcHRpb25zIGZvciBwYXJraW5nIHRoYXQgYXJlIG1vcmUgYXBwbGljYWJsZSB0byBzb21lIHBhcnRpY2lwYW50cyB0aGFuIG90aGVycy4gWW91IHNob3VsZCB0aGluayBhYm91dCBzb21lIGluZGl2aWR1YWwgc2NlbmFyaW9zLCBmb3IgZXhhbXBsZTogIkknbSBhIG1pZGRsZSBzY2hvb2wgc3R1ZGVudCBmYW1pbHksIHByZXNlbnRpbmcgaW4gdGhlIFNTQywgd2hvIHdpbGwgbmVlZCB0byBhdHRlbmQgYSBwbGVuYXJ5IHByZXNlbnRhdGlvbiwgYW5kIHZpc2l0IHRoZSBNVUMiIG9yICJJJ20gYSBoaWdoIHNjaG9vbCBzdHVkZW50IGZhbWlseSwgcHJlc2VudGluZyBpbiB0aGUgRHVubiBDZW50ZXIsIHdobyB3aWxsIGF0dGVuZCB0aGUgcGxlbmFyeSBzZXNzaW9uLCBhbmQgdmlzaXQgdGhlIE1VQyIgYmVjYXVzZSBlYWNoIG9mIHRoZXNlIHNjZW5hcmlvcyByZXF1aXJlcyBhIGRpZmZlcmVudCB0cmFuc3BvcnRhdGlvbiBwbGFuLiBTbyB0aGluayBhYm91dCBhbGwgb2YgdGhlIHBvc3NpYmxlIHNjZW5hcmlvcyBiZWZvcmUgZGlnaXRpemluZyB0aGUgZGF0YSBzbyB5b3UgY2FuIG1ha2Ugb25seSB0aGUgbW9zdCBuZWNlc3NhcnkgcG9seWxpbmVzIGZvciB0aGUgbWFwLg0KDQo8cCBhbGlnbj0iY2VudGVyIj48ZGl2IGNsYXNzPSJ6b29tIj48aW1nIHNyYz0gIkltYWdlcy9hcmNnaXMtc2tldGNoLXBvbHlsaW5lLnBuZyIgYWx0PSJDcmVhdGUgUG9seWxpbmUgU2hhcGVmaWxlIiBzdHlsZT0id2lkdGg6MTAwJSI+PC9kaXY+PC9wPg0KDQpOZXh0LCB3aXRoIGVhY2ggb2YgdGhlIGRhdGFzZXRzIHlvdSBoYXZlIGNyZWF0ZWQsIGZvbGxvdyB0aGUgc3RlcHMgYXQgdGhlIGVuZCBvZiBbRXhlcmNpc2UgNiwgU3RlcCAyXShodHRwczovL2NocmlzbWdlbnRyeS5naXRodWIuaW8vR0lTMS1FeGVyY2lzZS02LyMxMl9TdGVwX1R3bzpfVGhlX0FuYWx5c2VzKSB0byBlZGl0IHRoZSBhdHRyaWJ1dGUgdGFibGVzLiBUaGluayBhYm91dCBzb21lIG9mIHRoZSBpbXBvcnRhbnQgYXR0cmlidXRlcyBlYWNoIGRhdGFzZXQgc2hvdWxkIGNvbnRhaW4uIEZvciBleGFtcGxlLCBidWlsZGluZ3Mgc2hvdWxkIGhhdmUgYSBmaWVsZCBmb3IgbmFtZXMgYW5kIG1heWJlIHRoZSByb3VuZCB0aGV5IHdpbGwgYmUgdXNlZCwgd2hpbGUgeW91ciBwb2x5bGluZXMgbWlnaHQgbmVlZCBhIGZpZWxkIGZvciB0aGUgdHlwZSBvZiBwYXJ0aWNpcGFudCB0aGF0IGl0IGlzIG1lYW50IGZvci4gQmUgc3VyZSB3aGVuIHlvdSBhZGQgZWFjaCBmaWVsZCB5b3UgdGhpbmsgYWJvdXQgdGhlIF9kYXRhIHR5cGVfIChudW1lcmljIHZhbHVlLCBkYXRlLCB0ZXh0KSB0aGF0IHdvdWxkIGJlIG1vc3QgYXBwcm9wcmlhdGUuIA0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAyPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfV2hhdCBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgcG9seWxpbmVzIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSAidHJhbnNwb3J0YXRpb24iIHBsYW4gZm9yIGVhY2ggdHlwZSBvZiBwYXJ0aWNpcGFudCBzY2VuYXJpb18NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KPGhyPjwvaHI+DQoNCjxkZXRhaWxzPg0KPHN1bW1hcnk+PGJpZz5WaWV3IERpcmVjdGlvbnMgaW4gPGI+IFtRR0lTXXtzdHlsZT0iY29sb3I6IzAwNjQwMCJ9IDwvYj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAyPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KPGhyPjwvaHI+DQoNCjxkZXRhaWxzPg0KPHN1bW1hcnk+PGJpZz5WaWV3IERpcmVjdGlvbnMgaW4gPGI+IFtSXXtzdHlsZT0iY29sb3I6IzY0OTVFRCJ9IDwvYj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAyPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KDQojIyBTdGVwIFRocmVlOiBUaGUgVmlzdWFsaXphdGlvbg0KDQpJbiB0aGlzIHN0ZXAgeW91IHdpbGwgdXNlIHByZXZpb3VzIGV4YW1wbGVzIGFuZCB5b3VyIG93biBkZXNpZ24gY29uY2VwdHMgdG8gY3JlYXRlIGEgdmlzdWFsaXphdGlvbiB0aGF0IGNhbiBiZSBkaXN0cmlidXRlZCB0byBhbGwgTWlkZGxlIFRlbm5lc3NlZSBTY2llbmNlIGFuZCBFbmdpbmVlcmluZyBGYWlyIHBhcnRpY2lwYW50cyBhcyBwYXJ0IG9mIHRoZWlyIOKAnEJlZm9yZSBBcnJpdmluZyBhdCB0aGUgTVRTRUYuLi7igJ0gcGFja2V0IHRoZXkgcmVjZWl2ZSBhZnRlciBwbGFjaW5nIGluIHRoZWlyIHJlZ2lvbmFsIGV2ZW50cy4gWW91IG1heSBuZWVkIHRvIHVzZSB2YXJpb3VzIGluc2V0IG1hcHMgb3Igb3RoZXIgbWV0aG9kcyB0byBlbnN1cmUgYWxsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuDQoNCjxkZXRhaWxzPjxzdW1tYXJ5PjxiaWc+VmlldyBkaXJlY3Rpb25zIGluIDxiPiBbQXJjR0lTIFByb117c3R5bGU9ImNvbG9yOiNmZjQ1MDAifSA8L2I+PC9zcGFuPjwvYmlnPjwvc3VtbWFyeT4NCg0KU2ltaWxhciB0byB0aGUgW3ByZXZpb3VzIGV4ZXJjaXNlXShodHRwczovL2NocmlzbWdlbnRyeS5naXRodWIuaW8vR0lTMS1FeGVyY2lzZS02LyMxM19TdGVwX1RocmVlOl9UaGVfVmlzdWFsaXphdGlvbikgdGhlcmUgd2lsbCBub3QgYmUgYW4gZXhhbXBsZSBwcm92aWRlZCBmb3IgaG93IHRoaXMgbWFwIGNvdWxkIGJlIGRlc2lnbmVkLiBCZWNhdXNlIHRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gb3JnYW5pemUgYW5kIHByZXNlbnQgdGhlIGRhdGEgeW91IHdpbGwgbmVlZCB0byBjb25zaWRlciB0aGUgYmVzdCB3YXkgdG8gcHJlc2VudCB0aGlzIGluZm9ybWF0aW9uIGZvciB0aGUgTVRTRUYgcGFydGljaXBhbnRzLiBIb3dldmVyLCB0aGlzIG1hcCB3aWxsIGxpa2VseSBpbmNsdWRlIHRoZSBtb3N0IHRleHQgYW5kIGxhYmVsaW5nIG9mIGFsbCBwcmV2aW91cyBleGVyY2lzZXMgc28gZmFyLiBBcyBtZW50aW9uZWQgYmVmb3JlLCBiZWNhdXNlIG9mIHRoZSBkaWZmaWN1bHRpZXMgd2l0aCBsYWJlbCBvcmdhbml6YXRpb24gb24gdmFyaW91cyBtYXBzLCBzb21lIGNhcnRvZ3JhcGhlcnMgcHJlZmVyIHRvIG1hbnVhbGx5IGxhYmVsIGl0ZW1zIHNvIHRoZWlyIHByZWNpc2UgcG9zaXRpb25pbmcgY2FuIGJlIGNvbnRyb2xsZWQgYmV0dGVyIHRoYW4gaWYgcGxhY2VkIGJ5IHRoZSBzb2Z0d2FyZS4gUmVtZW1iZXIgdGhhdCB5b3UgY2FuIGFsdGVyIHRyYW5zcGFyZW5jeSBsZXZlbHMgb24gYW55IGRhdGFzZXQsIGNoYW5nZSBiYXNlbWFwLCBldGMuIHRvIG1ha2UgdGhlIG5lY2Vzc2FyeSBjdXN0b21pemF0aW9ucyB0byBoZWxwIHdpdGggbGVnaWJpbGl0eSBhbmQgcHJvdmlkZSB0aGUgbW9zdCB1c2VmdWwgbWFwIGZvciB0aGUgcGFydGljaXBhbnQgZmFtaWxpZXMuDQoNCjxiaWc+PGI+UXVlc3Rpb24gTm8uIDM8L2I+PC9iaWc+DQo8YmxvY2txdW90ZT4NCl9EZXNjcmliZSBzb21lIG9mIHRoZSBkaWZmaWN1bHRpZXMgeW91IGVuY291bnRlcmVkIHdpdGggY3JlYXRpbmcgdGhpcyBtYXAgd2l0aCB0aGUgdmFyaW91cyBzY2VuYXJpb3MgZm9yIGRpZmZlcmVudCBwYXJ0aWNpcGFudHNfDQo8L2Jsb2NrcXVvdGU+DQoNCjwvZGV0YWlscz4NCjxocj48L2hyPg0KDQo8ZGV0YWlscz48c3VtbWFyeT48YmlnPlZpZXcgZGlyZWN0aW9ucyBpbiA8Yj4gW1FHSVNde3N0eWxlPSJjb2xvcjojMDA2NDAwIn0gPC9iPjwvc3Bhbj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAzPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KPGhyPjwvaHI+DQoNCjxkZXRhaWxzPjxzdW1tYXJ5PjxiaWc+VmlldyBkaXJlY3Rpb25zIGluIDxiPiBbUl17c3R5bGU9ImNvbG9yOiM2NDk1RUQifSA8L2I+PC9zcGFuPjwvYmlnPjwvc3VtbWFyeT4NCg0KQmxhaC4uLmJsYWguLi5ibGFoLi4uDQoNCjxiaWc+PGI+UXVlc3Rpb24gTm8uIDM8L2I+PC9iaWc+DQo8YmxvY2txdW90ZT4NCl9JbnNlcnQgVGV4dCBIZXJlXw0KPC9ibG9ja3F1b3RlPg0KDQo8L2RldGFpbHM+DQoNCiMjIFN0ZXAgRm91cjogVGhlIEZ1bGwgRXhwZXJpZW5jZQ0KDQpBZnRlciBzZWVpbmcgeW91ciBkcmFmdCBhbmQgc3BlYWtpbmcgd2l0aCB0aGUgQVBTVSBEaW5pbmcgU2VydmljZXMgRGlyZWN0b3IsIHRoZSBDb1NURU0gRGVhbiB0aG91Z2h0IHRoYXQgaXQgd291bGQgYmUgYmVuZWZpY2lhbCB0byBhbHNvIGluY2x1ZGUgc29tZSBvbi1jYW1wdXMgZGluaW5nIGxvY2F0aW9ucyBvbiB0aGUgbWFwLiBUaGUgZGVhbiBhbmQgZGlyZWN0b3Igb2YgZGluaW5nIHNlcnZpY2VzIG1hZGUgYSBwbGFuIHRvIGtlZXAgb25seSB0aGUgbG9jYXRpb25zIGluIHRoZSBNVUMgb3BlbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBNVFNFRiBzbyBmYW1pbGllcyB3b3VsZCBoYXZlIGFjY2VzcyB0byBsdW5jaCBvcHRpb25zIHdoaWxlIG9uIGNhbXB1cy4gU2luY2UgeW91IGFscmVhZHkgaGF2ZSB0aGlzIGluZm9ybWF0aW9uIHRoZSBkZWFuIHRob3VnaHQgaXQgd291bGQgYmUgYSBzaW1wbGUgcmVxdWVzdC4NCg0KPGRldGFpbHM+PHN1bW1hcnk+PGJpZz5WaWV3IGRpcmVjdGlvbnMgaW4gPGI+IFtBcmNHSVMgUHJvXXtzdHlsZT0iY29sb3I6I2ZmNDUwMCJ9IDwvYj48L3NwYW4+PC9iaWc+PC9zdW1tYXJ5Pg0KDQpGb2xsb3dpbmcgdGhlIHN0ZXBzIGluIFtFeGVyY2lzZSA1LCBTdGVwIDFdKGh0dHBzOi8vY2hyaXNtZ2VudHJ5LmdpdGh1Yi5pby9HSVMxLUV4ZXJjaXNlLTUvIzExX1N0ZXBfT25lOl9UaGVfRGF0YSkgdG8gImFkZCBhIGZvbGRlciBjb25uZWN0aW9uIiwgY29ubmVjdCB0byB5b3VyIF9FeGVyY2lzZSA2IHByb2plY3QgZm9sZGVyXyBhbmQgYWRkIHRoZSBvbi1jYW1wdXMgZGluaW5nIGxvY2F0aW9ucyB5b3UgY3JlYXRlZC4gU2VsZWN0IG9ubHkgdGhlIGRpbmluZyBsb2NhdGlvbnMgaW5zaWRlIHRoZSBNVUMgYW5kIGV4cG9ydCB0aGUgc3Vic2V0IGRhdGEgdG8geW91ciBjdXJyZW50IHByb2plY3QgZm9sZGVyLiBOb3cgeW91IGNhbiByZW1vdmUgdGhlIGZ1bGwgb24tY2FtcHVzIGRpbmluZyBkYXRhc2V0LiBXaXRoIGFsbCBvZiB0aGUgZGF0YXNldHMgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmluYWwgbWFwLCBmaW5pc2ggdGhlIHZpc3VhbGl6YXRpb24gZm9yIHRoZSBkZWFuJ3MgZmluYWwgYXBwcm92YWwuDQoNCjxiaWc+PGI+UXVlc3Rpb24gTm8uIDQ8L2I+PC9iaWc+DQo8YmxvY2txdW90ZT4NCl9JbnNlcnQgVGV4dCBIZXJlXw0KPC9ibG9ja3F1b3RlPg0KDQo8L2RldGFpbHM+DQo8aHI+PC9ocj4NCg0KPGRldGFpbHM+PHN1bW1hcnk+PGJpZz5WaWV3IGRpcmVjdGlvbnMgaW4gPGI+IFtRR0lTXXtzdHlsZT0iY29sb3I6IzAwNjQwMCJ9IDwvYj48L3NwYW4+PC9iaWc+PC9zdW1tYXJ5Pg0KDQpCbGFoLi4uYmxhaC4uLmJsYWguLi4NCg0KPGJpZz48Yj5RdWVzdGlvbiBOby4gNDwvYj48L2JpZz4NCjxibG9ja3F1b3RlPg0KX0luc2VydCBUZXh0IEhlcmVfDQo8L2Jsb2NrcXVvdGU+DQoNCjwvZGV0YWlscz4NCjxocj48L2hyPg0KDQo8ZGV0YWlscz48c3VtbWFyeT48YmlnPlZpZXcgZGlyZWN0aW9ucyBpbiA8Yj4gW1Jde3N0eWxlPSJjb2xvcjojNjQ5NUVEIn0gPC9iPjwvc3Bhbj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiA0PC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KDQojIFRoZSBXcml0ZS1VcA0KDQpJbiB0aGUgcHJlc2VudGF0aW9uIG9mIHRoZSBtYXAgeW91IHByb3ZpZGUgdG8gdGhlIENvU1RFTSBEZWFuIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246DQoNCi0gRGVzY3JpYmUgaG93IHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YgdGhlIGZpbmFsIG1hcCAobGVnZW5kLCB0ZXh0LCBzeW1ib2xzLCBldGMuKSBhcmUgdXNlZCBieSB0aGUgbWlkZGxlIHNjaG9vbCBvciBoaWdoIHNjaG9vbCBwYXJ0aWNpcGFudHMgYXQgdGhlIE1UU0VGIHRvIG5hdmlnYXRlIGNhbXB1cy4NCi0gUHJvcG9zZSB0byB0aGUgZGVhbiB0aGUgY3JlYXRpb24gb2YgYSAic2ltaWxhciBzdHlsZSIgbWFwIGZvciBpbmNvbWluZyBDb1NURU0gZnJlc2htYW4gdGhhdCBjb3VsZCBiZSBwcm92aWRlZCB0byB0aGVtIGluIHRoZWlyIFNURU0tZm9jdXNlZCBBUFNVIDEwMDAgY291cnNlcy4NCiAgLSBXaGF0IGRhdGFzZXRzIHdvdWxkIGJlIGluY2x1ZGVkPw0KICAtIFdoYXQgaW5mb3JtYXRpb24gd291bGQgeW91IG5lZWQgZnJvbSB0aGUgZGVhbidzIG9mZmljZT8NCiAgLSBIb3cgd291bGQgdGhpcyBiZSBiZW5lZmljaWFsIGZvciBpbmNvbWluZyBzdHVkZW50cyB0byBmZWVsIGxpa2UgcGFydCBvZiB0aGUgY29sbGVnZSBvciB0aGVpciBzcGVjaWZpYyBkZXBhcnRtZW50Pw0KDQpXaGVuIGNvbXBsZXRlLCBzZW5kIGEgbGluayB0byB5b3VyIF9Db2xhYiBOb3RlYm9va18gb3Igd29yZCBkb2N1bWVudCB3aXRoIGFuc3dlcnMgdG8gUXVlc3Rpb25zIDEtNCBhbmQgeW91ciBjb21wbGV0ZWQgbWFwIHZpYSBlbWFpbC4=